package ar.com.ctrln.control.administracion.liquidaciones;

import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import ar.com.ctrln.persistence.model.cliente.Cliente;
import ar.com.ctrln.persistence.model.contratacion.ContratacionServicio;
import ar.com.ctrln.persistence.model.contratacion.DetalleContratacion;
import ar.com.ctrln.persistence.model.contratacion.DetalleContratacionInternet;
import ar.com.ctrln.persistence.model.liquidacion.Componente;
import ar.com.ctrln.persistence.model.liquidacion.DetalleLiquidacion;
import ar.com.ctrln.persistence.model.liquidacion.Liquidacion;
import ar.com.ctrln.services.cliente.GestorCliente;
import ar.com.ctrln.services.contratacion.GestorContratacionServicio;
import ar.com.ctrln.services.contratacion.GestorDetalleContratacion;
import ar.com.ctrln.services.contratacion.GestorDetalleContratacionInternet;
import ar.com.ctrln.services.liquidacion.GestorComponente;
import ar.com.ctrln.services.liquidacion.GestorDetalleLiquidacion;
import ar.com.ctrln.services.liquidacion.GestorLiquidacion;

@Controller("consultarLiquidacion")
public class ConsultarLiquidacion {

	@Autowired
	private GestorCliente gestorCliente;

	@Autowired
	private GestorLiquidacion gestorLiquidacion;

	@Autowired
	private GestorDetalleLiquidacion gestorDetalleLiquidacion;

	@Autowired
	private GestorComponente gestorComponente;

	@Autowired
	private GestorContratacionServicio gestorContratacionServicio;

	@Autowired
	private GestorDetalleContratacion gestorDetalleContratacion;

	@Autowired
	private GestorDetalleContratacionInternet gestorDetalleContratacionInternet;


	public List<Cliente> listarClientes() {
		return gestorCliente.listarClientes();
	}


	public Set<DetalleContratacionInternet> listarDetallesContratacionInternet(
			long idCliente) {

		List<ContratacionServicio> contrataciones = gestorContratacionServicio
				.listar(idCliente);
		Set<DetalleContratacion> detalles = new HashSet<DetalleContratacion>();
		Set<DetalleContratacionInternet> resultado = new HashSet<DetalleContratacionInternet>();

		for (ContratacionServicio contratacionServicio : contrataciones) {
			detalles = gestorDetalleContratacion
					.listarDetallesDeContratacion(contratacionServicio.getId());
			for (DetalleContratacion detalleContratacion : detalles) {
				if (detalleContratacion instanceof DetalleContratacionInternet) {
					resultado
							.add((DetalleContratacionInternet) detalleContratacion);
				}
			}
		}

		return resultado;
	}

	public Liquidacion buscarLiquidacion(Date desde, Date hasta) {

		return gestorLiquidacion.getLiquidacion(desde, hasta);
	}

	public Liquidacion buscarLiquidacion(int mes, int anio) {
		return gestorLiquidacion.getLiquidacion(mes, anio);
	}

	public void nueva(Liquidacion liquidacion) {
		gestorLiquidacion.nuevoLiquidacion(liquidacion);
	}

	public DetalleLiquidacion buscarDetalleLiquidacion(int mes, int anio,
			long idLiquidacion, long idCliente) {

		return gestorDetalleLiquidacion.getDetalle(mes, anio, idLiquidacion,
				idCliente);
	}

	public void nuevo(DetalleLiquidacion detalle) {
		gestorDetalleLiquidacion.nuevoDetalle(detalle);
	}

	public void nuevo(Componente componente) {
		gestorComponente.nuevoComponente(componente);
	}

	public void actualizarDetalle(DetalleLiquidacion detalle) {
		gestorDetalleLiquidacion.actualizarDetalle(detalle);
	}

	public List<DetalleLiquidacion> buscarDetalleLiquidacion(long idLiquidacion) {
		return gestorDetalleLiquidacion.listarDetalle(idLiquidacion);
	}

}
